package org.oschina.helper.query;

import java.util.List;

public interface IQueryHelper {

	/**
	 * 查询
	 * @param <T>
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>List<T> query(String sql,Object args[],Class<T> type);
	
	/**
	 * 查询_缓存
	 * @param <T>
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>List<T> query_cache(String sql,Object args[],Class<T> type);
	
	/**
	 * 查询
	 * @param <T>
	 * @param columns
	 * @param where
	 * @param sort
	 * @param args
	 * @param type
	 * @param first
	 * @param max
	 * @return
	 */
	public <T>List<T> query(String columns[],String where[],String sort[],Object args[],Class<T> type,int first,int max);
	
	/**
	 * 查询
	 * @param <T>
	 * @param table
	 * @param columns
	 * @param where
	 * @param sort
	 * @param args
	 * @param type
	 * @param first
	 * @param max
	 * @return
	 */
	public <T>List<T> query(String table,String columns[],String where[],String sort[],Object args[],Class<T> type,int first,int max);
	
	/**
	 * 查询_缓存
	 * @param <T>
	 * @param columns
	 * @param where
	 * @param sort
	 * @param args
	 * @param type
	 * @param first
	 * @param max
	 * @return
	 */
	public <T>List<T> query_cache(String columns[],String where[],String sort[],Object args[],Class<T> type,int first,int max);
	
	/**
	 * 查询_缓存
	 * @param <T>
	 * @param cacheKey
	 * @param timeout
	 * @param columns
	 * @param where
	 * @param sort
	 * @param args
	 * @param type
	 * @param first
	 * @param max
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,int timeout,String columns[],String where[],String sort[],Object args[],Class<T> type,int first,int max);
	
	/**
	 * 查询_缓存
	 * @param <T>
	 * @param cacheKey
	 * @param timeout
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,int timeout,String sql,Object args[],Class<T> type);
	
	/**
	 * 查询_缓存_连续的列表储存查询的值
	 * @param <T>
	 * @param cacheKey
	 * @param timeout
	 * @param maxLength  最大缓存数量 超过这个数值不缓存  -1代表全部缓存
	 * @param first
	 * @param max
	 * @param type
	 * @param callback
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,int timeout,int maxLength,int first,int max,Class<T> type,IQueryCacheCallback callback);
	
	/**
	 * 查询_缓存_连续的列表储存查询的值
	 * @param <T>
	 * @param cacheKey
	 * @param itemKey
	 * @param timeout
	 * @param maxLength  最大缓存数量 超过这个数值不缓存  -1代表全部缓存
	 * @param first
	 * @param max
	 * @param type
	 * @param callback
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,String itemKey,int timeout,int itemTimeout,int maxLength,int first,int max,Class<T> type,IQueryCacheCallback callback);
	
	/**
	 * 查询_缓存_连续的列表储存查询的值
	 * @param <T>
	 * @param cacheKey
	 * @param maxLength  最大缓存数量 超过这个数值不缓存  -1代表全部缓存
	 * @param first
	 * @param max
	 * @param type
	 * @param callback
	 * @return
	 */
	public <T>List<T> query_cache(String cacheKey,int maxLength,int first,int max,Class<T> type,IQueryCacheCallback callback);
	
	/**
	 * 查询对象
	 * @param <T>
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T> Object queryForObject(String sql,Object args[],Class<T> type);
	
	/**
	 * 查询对象
	 * @param <T>
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public <T> Object queryForObject(String columns[],String where[],Object args[],Class<T> type);
	
	/**
	 * 查询对象
	 * @param <T>
	 * @param table
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public <T> Object queryForObject(String table,String columns[],String where[],Object args[],Class<T> type);
	
	/**
	 * 查询对象_缓存
	 * @param <T>
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T> Object queryForObject_cache(String sql,Object args[],Class<T> type);
	
	/**
	 * 查询对象_缓存
	 * @param <T>
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public <T> Object queryForObject_cache(String columns[],String where[],Object args[],Class<T> type);
	
	/**
	 * 查询对象_缓存
	 * @param <T>
	 * @param key
	 * @param timeout
	 * @param sql
	 * @param args
	 * @param type
	 * @return
	 */
	public <T> Object queryForObject_cache(String key,int timeout,String sql,Object args[],Class<T> type);
	
	/**
	 * 查询对象_缓存
	 * @param <T>
	 * @param key
	 * @param timeout
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public <T> Object queryForObject_cache(String key,int timeout,String columns[],String where[],Object args[],Class<T> type);

	/**
	 * 返回数据总量
	 * @param table
	 * @param where
	 * @param args
	 * @return
	 */
	public long queryDataSum(String table,String where[],Object args[]);
	
	/**
	 * 返回数据总量
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public long queryDataSum(String where[],Object args[],Class type);
	
	/**
	 * 返回数据总量_缓存
	 * @param key
	 * @param tableName
	 * @param where
	 * @param args
	 * @return
	 */
	public long queryDataSum_cache(String key,int timeout,String tableName,String where[],Object args[]);

	/**
	 * 返回数据总量_缓存
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public long queryDataSum_cache(String where[],Object args[],Class type);
	
	/**
	 * 插入_拼接SQL
	 * @param columns
	 * @param args
	 * @param type
	 * @return
	 */
	public long insert(String columns[],Object args[],Class type);
	
	/**
	 * 插入_拼接SQL
	 * @param table
	 * @param columns
	 * @param args
	 * @return
	 */
	public long insert(String table,String columns[],Object args[]);
	
	/**
	 * 插入_拼接SQL_缓存
	 * @param columns
	 * @param args
	 * @param type
	 * @return
	 */
	public long insert_cache(String columns[],Object args[],Class type);
	
	/**
	 * 插入_拼接SQL_缓存
	 * @param key
	 * @param table
	 * @param columns
	 * @param args
	 * @return
	 */
	public long insert_cache(String key,String table,String columns[],Object args[]);
	
	/**
	 * 更新_拼接SQL
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public long update(String columns[],String where[],Object args[],Class type);
	
	/**
	 * 更新_拼接SQL
	 * @param table
	 * @param columns
	 * @param where
	 * @param args
	 * @return
	 */
	public long update(String table,String columns[],String where[],Object args[]);
	
	/**
	 * 更新
	 * @param sql
	 * @param args
	 * @return
	 */
	public long update(String sql,Object args[]);
	
	/**
	 * 更新_拼接SQL
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public long update_cache(String columns[],String where[],Object args[],Class type);

	/**
	 * 更新_拼接SQL_缓存
	 * @param table
	 * @param columns
	 * @param where
	 * @param args
	 * @return
	 */
	public long update_cache(String key,String table,String columns[],String where[],Object args[]);
	
	
	/**
	 * 更新_缓存
	 * @param key
	 * @param sql
	 * @param args
	 * @return
	 */
	public long update_cache(String key,String sql,Object args[]);
	
	/**
	 * 删除_拼接SQL
	 * @param table
	 * @param where
	 * @param args
	 * @return
	 */
	public long delete(String table,String where[],Object args[]);
	
	/**
	 * 删除_拼接sql
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public long delete(String where[],Object args[],Class type);
	
	/**
	 * 删除_拼接SQL
	 * @param key
	 * @param table
	 * @param where
	 * @param args
	 * @return
	 */
	public long delete_cache(String key,String table,String where[],Object args[]);
	
	/**
	 * 删除_拼接sql
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public long delete_cache(String where[],Object args[],Class type);
	
	/**
	 * 批量更新
	 * @param sql
	 * @param args
	 * @return
	 */
	public int[] batchUpdate(String sql,List<Object[]> args);
	
	
	/**
	 * 批量更新
	 * @param table
	 * @param columns
	 * @param where
	 * @param args
	 * @return
	 */
	public int[] batchUpdate(String table,String columns[],String where[],List<Object[]> args);
	
	/**
	 * 批量更新
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public int[] batchUpdate(String columns[],String where[],List<Object[]> args,Class type);

	/**
	 * 批量更新_缓存
	 * @param key
	 * @param sql
	 * @param args
	 * @return
	 */
	public int[] batchUpdate_cache(String key,String sql,List<Object[]> args);
	
	/**
	 * 批量更新_缓存
	 * @param key
	 * @param table
	 * @param columns
	 * @param where
	 * @param args
	 * @return
	 */
	public int[] batchUpdate_cache(String key,String table,String columns[],String where[],List<Object[]> args);
	
	/**
	 * 批量更新_缓存
	 * @param columns
	 * @param where
	 * @param args
	 * @param type
	 * @return
	 */
	public int[] batchUpdate_cache(String columns[],String where[],List<Object[]> args,Class type);
}